iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

本章節「OpenSource」概要

Day 10: ELK Stack 安裝與多節點
Day 11: Logstash 配置與查詢系統日誌
Day 12: Redis 安裝與後台
Day 13: Redis Cluster 集群配置
Day 14: Prometheus 與 Grafana 安裝與監控
Day 15: 配置 Prometheus 監控 Kubernetes 叢集
Day 16: 使用 Grafana 進行數據視覺化及串接告警

認識Redis cluster

Redis Cluster 是 Redis 的分佈式部署模式,通過將數據分片分佈到多個節點來提高可擴展性和高可用性。與單機版 Redis 相比,Redis Cluster 能夠自動在多個節點之間分配數據,並在某個節點故障時進行自動故障轉移,確保服務的持續可用。

單機版 Redis 只能依賴單個節點的資源和容量,而 Redis Cluster 則通過多個節點協同工作,支持更大的數據集和更高的吞吐量,同時減少單點故障的風險。

準備腳本

今天一樣採用bitnami提供的腳本搭建Redis cluster(再加上一些修改之處)
路徑:bitnami/containers/bitnami/redis-cluster/

建立一個docker-compose.yml文件

sudo nano docker-compose.yml

貼入以下內容
再用取代功能將<主機ip>替換為你的主機ip
參數說明:需要REDIS_CLUSTER_ANNOUNCE_IP並映射出port才能被其他節點找到
注意volumes將conf掛載出來方便修改

# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0

version: '2'
services:
  redis-node-0:
    image: docker.io/bitnami/redis-cluster:7.2
    restart : always
    ports:
      - 7001:7001
      - 17001:17001
    volumes:
      - redis-cluster_data-0:/bitnami/redis/data
      - ./redis-c0/redis.conf:/opt/bitnami/redis/etc/redis.conf
    environment:
      - 'REDIS_PASSWORD=bitnami'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=<主機ip>'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_PORT_NUMBER=7001'
      - 'REDIS_NODES=<主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006'

  redis-node-1:
    image: docker.io/bitnami/redis-cluster:7.2
    restart : always
    ports:
      - 7002:7002
      - 17002:17002
    volumes:
      - redis-cluster_data-1:/bitnami/redis/data
      - ./redis-c1/redis.conf:/opt/bitnami/redis/etc/redis.conf
    environment:
      - 'REDIS_PASSWORD=bitnami'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=<主機ip>'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_PORT_NUMBER=7002'
      - 'REDIS_NODES=<主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006'

  redis-node-2:
    image: docker.io/bitnami/redis-cluster:7.2
    restart : always
    ports:
      - 7003:7003
      - 17003:17003
    volumes:
      - redis-cluster_data-2:/bitnami/redis/data
      - ./redis-c2/redis.conf:/opt/bitnami/redis/etc/redis.conf
    environment:
      - 'REDIS_PASSWORD=bitnami'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=<主機ip>'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_PORT_NUMBER=7003'
      - 'REDIS_NODES=<主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006'

  redis-node-3:
    image: docker.io/bitnami/redis-cluster:7.2
    restart : always
    ports:
      - 7004:7004
      - 17004:17004
    volumes:
      - redis-cluster_data-3:/bitnami/redis/data
      - ./redis-c3/redis.conf:/opt/bitnami/redis/etc/redis.conf
    environment:
      - 'REDIS_PASSWORD=bitnami'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=<主機ip>'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_PORT_NUMBER=7004'
      - 'REDIS_NODES=<主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006'

  redis-node-4:
    image: docker.io/bitnami/redis-cluster:7.2
    restart : always
    ports:
      - 7005:7005
      - 17005:17005
    volumes:
      - redis-cluster_data-4:/bitnami/redis/data
      - ./redis-c4/redis.conf:/opt/bitnami/redis/etc/redis.conf
    environment:
      - 'REDIS_PASSWORD=bitnami'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=<主機ip>'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_PORT_NUMBER=7005'
      - 'REDIS_NODES=<主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006'

  redis-node-5:
    image: docker.io/bitnami/redis-cluster:7.2
    restart : always
    ports:
      - 7006:7006
      - 17006:17006
    volumes:
      - redis-cluster_data-5:/bitnami/redis/data
      - ./redis-c4/redis.conf:/opt/bitnami/redis/etc/redis.conf
    depends_on:
      - redis-node-0
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
    environment:
      - 'REDIS_PASSWORD=bitnami'
      - 'REDISCLI_AUTH=bitnami'
      - 'REDIS_CLUSTER_REPLICAS=1'
      - 'REDIS_CLUSTER_ANNOUNCE_IP=<主機ip>'
      - 'REDIS_CLUSTER_DYNAMIC_IPS=no'
      - 'REDIS_PORT_NUMBER=7006'
      - 'REDIS_NODES=<主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006'
      - 'REDIS_CLUSTER_CREATOR=no'

volumes:
  redis-cluster_data-0:
    driver: local
  redis-cluster_data-1:
    driver: local
  redis-cluster_data-2:
    driver: local
  redis-cluster_data-3:
    driver: local
  redis-cluster_data-4:
    driver: local
  redis-cluster_data-5:
    driver: local

再來運行

docker compose -f docker-compose.yml up -d

初始化集群

首先docker-compose建立的服務是在容器內對吧?
那我們需要從本機連入redis cluster的話就需要額外安裝redis-cli

#安裝工具
sudo apt-get install redis
#建立集群
redis-cli --cluster create <主機ip>:7001 <主機ip>:7002 <主機ip>:7003 <主機ip>:7004 <主機ip>:7005 <主機ip>:7006 --cluster-replicas 1 -a bitnami

https://ithelp.ithome.com.tw/upload/images/20240804/20168384M7JmZRCXxE.jpg

測試驗證

#登入
redis-cli -h <主機ip> -p 7001 -a bitnami
#檢查
redis-cli -c -a bitnami --cluster check <主機ip>:7001
#修復
redis-cli -c -a bitnami --cluster fix <主機ip>:7001

https://ithelp.ithome.com.tw/upload/images/20240815/20168384ShluLwsl9e.jpg

關於redis.conf的配置這裡就不深入探討了
例如:最大連線數 maxclients 最大記憶體 maxmemory 等有很多優化空間


上一篇
Day 12: Redis 安裝與後台
下一篇
Day 14: Prometheus 與 Grafana 安裝與監控
系列文
DevOps需要的技能樹...(應該)都點得到!25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言